//package haversine;
//
//import org.geotools.geojson.geom.GeometryJSON;
//import org.geotools.geometry.jts.GeometryBuilder;
//import org.locationtech.jts.geom.Point;
//import org.locationtech.jts.geom.Polygon;
//
//import java.io.StringWriter;
//
///**
// * @author 黄乾坤
// * @create 2023-04-14 11:00
// */
//public class CoordinateUtils {
//
//    private static final double EARTH_RADIUS = 6371.0; // 地球半径，单位：千米
//
//    /**
//     *
//     * @param lat1 纬度1
//     * @param lon1 经度1
//     * @param lat2 纬度2
//     * @param lon2 经度2
//     * @return
//     */
//    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
//        // 将经纬度从度数转换为弧度
//        double dLat = Math.toRadians(lat2 - lat1);
//        double dLon = Math.toRadians(lon2 - lon1);
//        lat1 = Math.toRadians(lat1);
//        lat2 = Math.toRadians(lat2);
//
//        // 应用Haversine公式计算两个坐标点之间的距离
//        double a = Math.pow(Math.sin(dLat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dLon / 2), 2);
//        double c = 2 * Math.asin(Math.sqrt(a));
//        double distance = EARTH_RADIUS * c * 1000; // 将距离从千米转换为米
//
//        return distance;
//    }
//
//    public static boolean isWithin100M(double lat1, double lon1, double lat2, double lon2) {
//        // 计算距离
//        double distance = haversine(lat1, lon1, lat2, lon2);
//
//        // 判断距离是否小于100米
//        return distance <= 100;
//    }
//
//    public static void main(String[] args) {
//        // 示例坐标点
//        double lat1 = 39.9;
//        double lon1 = 116.3;
//        double lat2 = 39.9;
//        double lon2 = 116.4;
//
//        // 判断两个坐标是否在100米范围内
//        if (isWithin100M(lat1, lon1, lat2, lon2)) {
//            System.out.println("第二个坐标点在第一个坐标点的100米范围内");
//        } else {
//            System.out.println("第二个坐标点不在第一个坐标点的100米范围内");
//        }
//    }
//
//    // --------------------------------------以上是计算距离法-------------------------------------------//
//
//    // --------------------------------------以下是画圆包含法-------------------------------------------//
//    /**
//     *
//     * @throws Exception
//     */
//    public void contains() throws Exception {
//        GeometryBuilder geometryBuilder = new GeometryBuilder();
//        Polygon circle = geometryBuilder.circle(116.22897859799428D, 39.95328297977369D, 0.005D, 100);
//
//        System.out.println(circle);
//        GeometryJSON geometryJson = new GeometryJSON(8);
//
//        StringWriter stringWriter = new StringWriter();
//        geometryJson.write(circle, stringWriter);
//        System.out.println(stringWriter);
//        Point polygon1 = geometryBuilder.point(116.22897859799428D, 39.95328297977369D);
//
//        boolean contains = circle.contains(polygon1);
//        System.out.println(contains);
//    }
//}
